package com.正则表达式配;

class Solution1 {
	
	    public boolean isMatch(String s, String p) {
	        if(s==null&&p==null) return false;
	        int sindex=0,pindex=0;
	        return MatchCore(s,sindex,p,pindex);
	    }
	    public boolean MatchCore(String s,int sindex,String p,int pindex){
	        if(sindex==s.length()&&pindex==p.length()){
	            return true;
	        }
	        if(sindex<s.length()&&pindex==p.length()){
	            return false;
	        }
	        //如果匹配的第一个字符相等，并且该匹配字符的下一个字符是'*'
	        //分为两种情况1*为一次，即，sindex+1,pindex+2
	        //2*为多次，即sindex+1,pindex不变
	        if(pindex+1<p.length()&&p.charAt(pindex+1)=='*'){
	        if((sindex<s.length()&&s.charAt(sindex)==p.charAt(pindex))||(pindex<p.length()&&p.charAt(pindex)=='.')){
	            return MatchCore(s,sindex+1,p,pindex)||MatchCore(s,sindex+1,p,pindex+2);
	        }
	        else{//表示第一个字符就不匹配，并且该字符的第二个字符为*则，将匹配字符的pindex往后移动2个将*看做为0次
	            return MatchCore(s,sindex,p,pindex+2);
	            
	        }
	    }
	        //若匹配的第一个字符相等并且，匹配的下一个字符不是'*'
	           //pindex不用去比较与p.length() 的长度，因为每次进去函数的递归时候都已经判断过此时的pindex还没有到达
	           //p.length的长度
	        if((sindex<s.length()&&s.charAt(sindex)==p.charAt(pindex))||(sindex<s.length()&&p.charAt(pindex)=='.')){
	            return MatchCore(s,sindex+1,p,pindex+1);
	        }
	        return false;
	    }
	
}
